package chapter3_对象共享.一可见性;

/**
 * 不可见测试
 *
 * 主线程：改变ready状态，并且更改number值
 * 读线程：一直循环并打印number值,直至ready变为true
 *
 * 问题一：但是由于可见性，导致ready的状态未能被读线程读到
 * 问题二：重排序_在没有同步的情况下编译器，处理器和运行时等都可能对操作的执行顺序进行意想不到的调整，使得结果难测
 * @author lin
 * @date 2020-09-17 21:33
 */
public class NoVisibility {
    private static int number;
    private static boolean ready;

    private static class ReaderThread extends Thread {
        @Override
        public void run() {
            while (!ready) {
                Thread.yield();
                System.out.println(number);
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        ReaderThread thread = new ReaderThread();
        thread.start();
        ready = false;
        number = 42;
        Thread.sleep(5000);
    }
}
